/** * */ package com.gmail.charleszq.picorner.ui.helper; import android.content.Context; import android.graphics.Bitmap; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import com.gmail.charleszq.picorner.R; import com.gmail.charleszq.picorner.dp.IPhotosProvider; import com.gmail.charleszq.picorner.model.MediaObject; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; /** * @author charles(charleszq@gmail.com) * */ public class PhotoGridAdapter extends BaseAdapter { private Context mContext; private IPhotosProvider mPhotos; private ImageLoader mImageFetcher; private int mNumColumns = 0; private int mItemHeight; private android.widget.AbsListView.LayoutParams mImageViewLayoutParams; private DisplayImageOptions mImageDisplayOptions; /** * */ public PhotoGridAdapter(Context context, IPhotosProvider provider, ImageLoader fetcher) { this.mContext = context; this.mPhotos = provider; this.mImageFetcher = fetcher; mImageViewLayoutParams = new GridView.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); mImageDisplayOptions = new DisplayImageOptions.Builder() .showStubImage(R.drawable.empty_photo).cacheInMemory() .showImageForEmptyUri(R.drawable.empty_photo).cacheOnDisc() .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) .bitmapConfig(Bitmap.Config.RGB_565).build(); } /* * (non-Javadoc) * * @see android.widget.Adapter#getCount() */ @Override public int getCount() { return mPhotos.getCurrentSize(); } /* * (non-Javadoc) * * @see android.widget.Adapter#getItem(int) */ @Override public Object getItem(int position) { return mPhotos.getMediaObject(position); } /* * (non-Javadoc) * * @see android.widget.Adapter#getItemId(int) */ @Override public long getItemId(int position) { return position; } /* * (non-Javadoc) * * @see android.widget.Adapter#getView(int, android.view.View, * android.view.ViewGroup) */ @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { // if it's not recycled, instantiate and // initialize imageView = new ImageView(mContext); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setLayoutParams(mImageViewLayoutParams); } else { // Otherwise re-use the converted view imageView = (ImageView) convertView; } // Check the height matches our calculated column width if (imageView.getLayoutParams().height != mItemHeight) { imageView.setLayoutParams(mImageViewLayoutParams); } MediaObject photo = mPhotos.getMediaObject(position); mImageFetcher.displayImage(photo.getThumbUrl(), imageView, mImageDisplayOptions); return imageView; } public void setNumColumns(int numColumns) { this.mNumColumns = numColumns; } public void setItemHeight(int height) { if (height == mItemHeight) { return; } mItemHeight = height; mImageViewLayoutParams = new GridView.LayoutParams( LayoutParams.MATCH_PARENT, mItemHeight); // mImageFetcher.setImageSize(height); notifyDataSetChanged(); } public int getNumColumns() { return mNumColumns; } }